/**
 * 主题工具函数库
 * 提供主题相关的核心工具函数
 */
import { DEFAULT_PRIMARY_COLOR } from '../styles/themeConfig';

/**
 * 默认主题设置
 * 定义应用的默认主题配置
 */
export const DEFAULT_THEME = {
  colorPrimary: DEFAULT_PRIMARY_COLOR,
  themeType: 'light' as const,
  useCompact: false,
};

/**
 * 主题颜色预设选项
 * 提供用户可选择的预设主题色列表
 */
export const THEME_COLOR_OPTIONS = [
  { value: '#1890ff', label: '蓝色' },
  { value: '#52c41a', label: '绿色' },
  { value: '#faad14', label: '橙色' },
  { value: '#f5222d', label: '红色' },
  { value: '#722ed1', label: '紫色' },
  { value: '#13c2c2', label: '青色' },
  { value: '#eb2f96', label: '粉色' },
  { value: '#fa8c16', label: '琥珀色' },
];

/**
 * 从localStorage加载主题配置
 * 从浏览器本地存储中读取并解析主题设置
 * 
 * @returns 解析后的主题设置对象
 */
export const loadThemeFromStorage = () => {
  try {
    const saved = localStorage.getItem('appSettings');
    if (saved) {
      const settings = JSON.parse(saved);
      // 确保返回完整的主题设置对象
      return {
        colorPrimary: settings.colorPrimary || DEFAULT_THEME.colorPrimary,
        themeType: (settings.themeType || DEFAULT_THEME.themeType) as 'light' | 'dark',
        useCompact: !!settings.useCompact,
      };
    }
  } catch (error) {
    console.error('Failed to load theme from localStorage:', error);
  }
  // 返回默认主题配置
  return DEFAULT_THEME;
};

/**
 * 保存主题配置到localStorage
 * 将当前主题设置序列化并存储到浏览器本地存储
 * 
 * @param themeSettings 要保存的主题设置对象
 */
export const saveThemeToStorage = (themeSettings: any) => {
  try {
    localStorage.setItem('appSettings', JSON.stringify(themeSettings));
  } catch (error) {
    console.error('Failed to save theme to localStorage:', error);
  }
};

/**
 * 检查是否为暗色模式
 * 通过document.documentElement的类名检查当前是否应用了暗色主题
 * 
 * @returns 是否为暗色模式
 */
export const isDarkMode = (): boolean => {
  return document.documentElement.classList.contains('dark');
};

/**
 * 格式化颜色为十六进制格式
 * 将颜色字符串标准化为十六进制格式
 * 
 * @param color 输入颜色字符串
 * @returns 标准化的十六进制颜色
 */
export const formatColorToHex = (color: string): string => {
  // 移除任何前导空格和#
  const cleanColor = color.trim().replace(/^#/, '');
  
  // 检查是否为有效的十六进制颜色
  const isValidHex = /^[0-9A-Fa-f]{6}$/.test(cleanColor);
  
  if (isValidHex) {
    return `#${cleanColor}`;
  }
  
  // 如果不是有效的十六进制颜色，返回默认颜色
  return DEFAULT_PRIMARY_COLOR;
};

/**
 * 创建主题样式对象
 * 生成基于当前主题的样式定义对象，用于内联样式或样式组件
 * 
 * @param themeType 当前主题类型
 * @returns 样式对象
 */
export const createThemeStyles = (themeType: 'light' | 'dark' = 'light') => {
  return {
    /**
     * 卡片样式
     * 使用Ant Design内置的CSS变量
     */
    card: {
      backgroundColor: `var(--ant-color-bg-elevated)`,
      borderColor: `var(--ant-color-border)`,
      boxShadow: `var(--ant-shadow-card)`,
    },
    
    /**
     * 标题样式
     * 使用Ant Design内置的CSS变量
     */
    title: {
      color: `var(--ant-color-text)`,
      fontWeight: `var(--ant-font-weight-strong)`,
    },
    
    /**
     * 文本样式
     * 使用Ant Design内置的CSS变量
     */
    text: {
      color: `var(--ant-color-text-secondary)`,
    },
    
    /**
     * 按钮样式
     * 使用Ant Design内置的CSS变量
     */
    button: {
      backgroundColor: `var(--ant-color-primary)`,
      borderColor: `var(--ant-color-primary)`,
      color: `var(--ant-color-primary-text)`,
      '&:hover': {
        backgroundColor: `var(--ant-color-primary-hover)`,
        borderColor: `var(--ant-color-primary-hover)`,
      },
    },
  };
};